package singleton;

/**
 * 静态内部类方式，单例模式
 */
public class InnerClassSingletonTest {
    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            new Thread(()->{
                System.out.println(InnerClassSingleton.getInstance());
            }).start();
        }
    }
}

/**
 * 本质上还是利用的jvm的类加载机制来保证线程安全；<br/>
 * 只有在使用的时候，才会触发加载内部类，让内部类初始化；<br/>
 * 属于“懒加载”的一种形式
 */
class InnerClassSingleton{
    private static class InnerClass{
        private static InnerClassSingleton instance = new InnerClassSingleton();
    }
    // 私有构造
    private InnerClassSingleton(){}

    // 对外提供访问获取方式
    public static InnerClassSingleton getInstance(){
        return InnerClass.instance;
    }
}
